node.js + expressで受けたPOSTのレスポンスが文字化けする問題の解消法
おばんです、今週末こそ映画『君の名は。』を見るぞと心に誓い、前日夜に小説版を一気読みして温めたものの、どこの映画館も満席で不完全燃焼の田中です。
先日Qiitaにて以下の記事を書きました。 node.js + expressでPOSTを受け取る & POSTパラメータをJSONで取得する - Qiita
これでさて簡単なAPIが作れるぞ! と思い立ち、普段慣れているiOSでクライアントを作って呼び出したものの日本語が文字化けする。 日本語の文字化けの回避方法です。
結論
なんのことはない、charset=utf-8;
をheaderに指定する必要がありました。
環境
- node.js: v6.2.2
- express: 4.14.0
- body-parser: 1.15.2
ソースコード
// Setup requires. const express = require('express'); const bodyParser = require('body-parser'); // Setup server and uses. const app = express(); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); // Setup listen. app.listen(3000); console.log('Server is online.'); // Setup APIs. // GET app.get('/', function(req, res) { console.log('GET Request.'); res.header('Content-Type', 'text/plain;charset=utf-8'); res.end('GET承り太郎'); }); // POST app.post('/', function(req, res) { console.log('POST Request.'); const text = 'POST承り太郎' + req.body.name; res.header('Content-Type', 'text/plain;charset=utf-8'); res.end(text); });
解説
res.header('Content-Type', 'text/plain;charset=utf-8');
レスポンスヘッダの追加。Content-Typeをtext/plainに指定し、文字コードをUTF-8に指定する。
まとめ
うっかりです。 文字コードは指定しましょう。